package KC.cimaV2;

import java.util.*;
import java.sql.Connection;

public class AlmacenNode {
    /**
     * Valores que puede tomar el atributo byt_tipo
     */
    public static byte RAIZ = 1;
    public static byte NODOINTERMEDIO = 2;
    public static byte HOJA = 3;
    /**
     * Atributo para almacenar objetos de tipo AlmacenOrigen
     */
    private ArrayList arrL_almacenesOrigen = new ArrayList();
    private Object almacenContr;
    private byte byt_tipo;

    public byte tipo( ){
        return byt_tipo;
    }

    public void tipo( byte byt_tipo ){
        this.byt_tipo = byt_tipo;
    }

    public AlmacenNode( Connection conn, int int_almacenCont, AlmacenOrigen alm_origen, boolean bol_esContrato, byte byt_tipo )throws Exception{
        if( bol_esContrato ){
            this.almacenContr = new Contrato();
            ((Contrato)almacenContr).load(conn.createStatement(), int_almacenCont );
        }else this.almacenContr = Almacen.getAlmacen(int_almacenCont, conn);
        if( alm_origen != null )this.arrL_almacenesOrigen.add(alm_origen);
        this.byt_tipo = byt_tipo;
    }

    public String codigoAlmacen(){
        String str_retVal;
        if( almacenContr instanceof Almacen ){
            str_retVal = ((Almacen)almacenContr).codigo();
        }else{
            str_retVal = ((Contrato)almacenContr).getDescripcion();
        }
        return str_retVal;
    }

    public int idAlmacen(){
        int int_retVal;
        if( almacenContr instanceof Almacen ){
            int_retVal = ((Almacen)almacenContr).getId();
        }else{
            int_retVal = ((Contrato)almacenContr).getIdContrato();
        }
        return int_retVal;
    }

    public int tipoAlmacen(){
        int int_retVal;
        if( almacenContr instanceof Almacen ){
            int_retVal = ((Almacen)almacenContr).tipo();
        }else{
            int_retVal = Almacen.TPUERTO;
        }
        return int_retVal;
    }

    public void agregarAlmacenesOrigen( Object [] alms_origen ){
        if( alms_origen != null ){
            Iterator itr_tmp = Arrays.asList(alms_origen).iterator();
            while( itr_tmp.hasNext() ){
                arrL_almacenesOrigen.add(itr_tmp.next());
            }
        }
    }

    public Object [] almacenesOrigen( ){
        return arrL_almacenesOrigen.toArray();
    }

    public double toneladasOrigen( ){
        double dbl_retVal = 0;
        Iterator itr_tmp = arrL_almacenesOrigen.iterator();
        while( itr_tmp.hasNext() ){
            AlmacenOrigen origen_tmp = (AlmacenOrigen)itr_tmp.next();
            dbl_retVal += origen_tmp.toneladas();
        }
        return dbl_retVal;
    }

    protected boolean almacenOrigen( int int_almacen ){
        boolean bol_retVal = false;
        Iterator itr_tmp = arrL_almacenesOrigen.iterator();
        while( itr_tmp.hasNext() ){
            AlmacenOrigen origen_tmp = (AlmacenOrigen)itr_tmp.next();
            if( origen_tmp.idAlmacen() == int_almacen ){
                bol_retVal = true;
                break;
            }
        }
        return bol_retVal;
    }

    protected double toneladasDestino( int int_almacen ){
        double dbl_retVal = 0;
        Iterator itr_tmp = arrL_almacenesOrigen.iterator();
        while( itr_tmp.hasNext() ){
            AlmacenOrigen origen_tmp = (AlmacenOrigen)itr_tmp.next();
            if( origen_tmp.idAlmacen() == int_almacen ){
                dbl_retVal = origen_tmp.toneladasDestino();
                break;
            }
        }
        return dbl_retVal;
    }

    protected double toneladasOrigen( int int_almacen ){
        double dbl_retVal = 0;
        Iterator itr_tmp = arrL_almacenesOrigen.iterator();
        while( itr_tmp.hasNext() ){
            AlmacenOrigen origen_tmp = (AlmacenOrigen)itr_tmp.next();
            if( origen_tmp.idAlmacen() == int_almacen ){
                dbl_retVal = origen_tmp.toneladas();
                break;
            }
        }
        return dbl_retVal;
    }

}
